package com.lostreseditores.sabersai.model.control;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.lostreseditores.sabersai.dataaccess.daoFactory.XMLHibernateDaoFactory;
import com.lostreseditores.sabersai.dataaccess.sessionFactory.HibernateSessionFactory;
import com.lostreseditores.sabersai.exceptions.ZMessManager;
import com.lostreseditores.sabersai.model.Calificacion;
import com.lostreseditores.sabersai.model.Calificacionxestudiante;
import com.lostreseditores.sabersai.model.Colegio;
import com.lostreseditores.sabersai.model.Curso;
import com.lostreseditores.sabersai.model.Distribuidor;
import com.lostreseditores.sabersai.model.Examen;
import com.lostreseditores.sabersai.model.Jornada;
import com.lostreseditores.sabersai.model.Premarcado;
import com.lostreseditores.sabersai.model.Tipoexamen;
import com.lostreseditores.sabersai.model.Usuario;
import com.lostreseditores.sabersai.model.VSalones;
import com.lostreseditores.sabersai.model.dto.CalificacionDTO;
import com.lostreseditores.sabersai.utilities.Utilities;


public class CalificacionLogic implements ICalificacionLogic {
	public List<Calificacion> getCalificacion() throws Exception {
		List<Calificacion> list = new ArrayList<Calificacion>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findAll();
		} catch (Exception e) {
			throw new ZMessManager().new GettingException(ZMessManager.ALL
					+ "Calificacion");
		} finally {
		}

		return list;
	}

	public void saveCalificacion(Integer caliestadon, Date califechad,
			Integer caliidn, Integer calipremarcan,
			Integer caliidn_Calificacion, Integer coleidn_Colegio,
			Integer cursidn_Curso, Integer distidn_Distribuidor,
			Integer examidn_Examen, Integer jornidn_Jornada,
			Integer usuaidn_Usuario) throws Exception {
		Calificacion entity = null;

		try {
			if (caliidn == null) {
				throw new ZMessManager().new EmptyFieldException("caliidn");
			}

			if (caliidn_Calificacion == null) {
				throw new ZMessManager().new EmptyFieldException(
						"caliidn_Calificacion");
			}

			if (coleidn_Colegio == null) {
				throw new ZMessManager().new EmptyFieldException(
						"coleidn_Colegio");
			}

			if (cursidn_Curso == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cursidn_Curso");
			}

			if (distidn_Distribuidor == null) {
				throw new ZMessManager().new EmptyFieldException(
						"distidn_Distribuidor");
			}

			if (examidn_Examen == null) {
				throw new ZMessManager().new EmptyFieldException(
						"examidn_Examen");
			}

			if (jornidn_Jornada == null) {
				throw new ZMessManager().new EmptyFieldException(
						"jornidn_Jornada");
			}

			if (usuaidn_Usuario == null) {
				throw new ZMessManager().new EmptyFieldException(
						"usuaidn_Usuario");
			}

			ICalificacionLogic logicCalificacion1 = new CalificacionLogic();
			IColegioLogic logicColegio2 = new ColegioLogic();
			ICursoLogic logicCurso3 = new CursoLogic();
			IDistribuidorLogic logicDistribuidor4 = new DistribuidorLogic();
			IExamenLogic logicExamen5 = new ExamenLogic();
			IJornadaLogic logicJornada6 = new JornadaLogic();
			IUsuarioLogic logicUsuario7 = new UsuarioLogic();
			Calificacion calificacionClass = logicCalificacion1
					.getCalificacion(caliidn_Calificacion);
			Colegio colegioClass = logicColegio2.getColegio(coleidn_Colegio);
			Curso cursoClass = logicCurso3.getCurso(cursidn_Curso);
			Distribuidor distribuidorClass = logicDistribuidor4
					.getDistribuidor(distidn_Distribuidor);
			Examen examenClass = logicExamen5.getExamen(examidn_Examen);
			Jornada jornadaClass = logicJornada6.getJornada(jornidn_Jornada);
			Usuario usuarioClass = logicUsuario7.getUsuario(usuaidn_Usuario);

			if (calificacionClass == null) {
				throw new ZMessManager().new ForeignException("calificacion");
			}

			if (colegioClass == null) {
				throw new ZMessManager().new ForeignException("colegio");
			}

			if (cursoClass == null) {
				throw new ZMessManager().new ForeignException("curso");
			}

			if (distribuidorClass == null) {
				throw new ZMessManager().new ForeignException("distribuidor");
			}

			if (examenClass == null) {
				throw new ZMessManager().new ForeignException("examen");
			}

			if (jornadaClass == null) {
				throw new ZMessManager().new ForeignException("jornada");
			}

			if (usuarioClass == null) {
				throw new ZMessManager().new ForeignException("usuario");
			}

			entity = getCalificacion(caliidn);

			if (entity != null) {
				throw new ZMessManager(ZMessManager.ENTITY_WITHSAMEKEY);
			}

			entity = new Calificacion();
			entity.setCaliestadon(caliestadon);
			entity.setCalifechad(califechad);
			entity.setCaliidn(caliidn);
			entity.setCalipremarcan(calipremarcan);
			entity.setCalificacion(calificacionClass);
			entity.setColegio(colegioClass);
			entity.setCurso(cursoClass);
			entity.setDistribuidor(distribuidorClass);
			entity.setExamen(examenClass);
			entity.setJornada(jornadaClass);
			entity.setUsuario(usuarioClass);
			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.save(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}

	public void savePaquete(Integer cursidn_Curso, Integer coleidn_Colegio,
			Integer usuaidn_Usuario, Date califechad,
			Integer distidn_Distribuidor) throws Exception {

		Calificacion entity = null;

		try {
			if (cursidn_Curso == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cursidn_Curso");
			}

			if (coleidn_Colegio == null) {
				throw new ZMessManager().new EmptyFieldException(
						"coleidn_Colegio");
			}

			if (usuaidn_Usuario == null) {
				throw new ZMessManager().new EmptyFieldException(
						"usuaidn_Usuario");
			}

			if (distidn_Distribuidor == null) {
				throw new ZMessManager().new EmptyFieldException(
						"distidn_Distribuidor");
			}

			ICursoLogic logicCurso = new CursoLogic();
			Curso cursoClass = logicCurso.getCurso(cursidn_Curso);
			IColegioLogic logicColegio = new ColegioLogic();
			Colegio colegioClass = logicColegio.getColegio(coleidn_Colegio);
			IUsuarioLogic logicUsuario = new UsuarioLogic();
			Usuario usuarioClass = logicUsuario.getUsuario(usuaidn_Usuario);
			IDistribuidorLogic logicDistribuidor = new DistribuidorLogic();
			Distribuidor distribuidorClass = logicDistribuidor
					.getDistribuidor(distidn_Distribuidor);

			entity = new Calificacion();
			entity.setCurso(cursoClass);
			entity.setColegio(colegioClass);
			entity.setUsuario(usuarioClass);
			entity.setCalifechad(califechad);
			entity.setDistribuidor(distribuidorClass);
			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.save(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}

	public void saveSalon(Integer cursidn_Curso, Integer usuaidn_Usuario,
			Date califechad, Integer cal_caliidn, Integer jornidn_Jornada)
			throws Exception {

		Calificacion entity = null;

		try {
			if (cursidn_Curso == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cursidn_Curso");
			}

			if (usuaidn_Usuario == null) {
				throw new ZMessManager().new EmptyFieldException(
						"usuaidn_Usuario");
			}

			ICursoLogic logicCurso = new CursoLogic();
			Curso cursoClass = logicCurso.getCurso(cursidn_Curso);
			IUsuarioLogic logicUsuario = new UsuarioLogic();
			Usuario usuarioClass = logicUsuario.getUsuario(usuaidn_Usuario);
			ICalificacionLogic logicCalificacion = new CalificacionLogic();
			Calificacion calificacionClass = logicCalificacion
					.getCalificacion(cal_caliidn);
			IJornadaLogic logicJornada = new JornadaLogic();
			Jornada jornadaClass = logicJornada.getJornada(jornidn_Jornada);

			entity = new Calificacion();
			entity.setCurso(cursoClass);
			entity.setUsuario(usuarioClass);
			entity.setCalifechad(califechad);
			entity.setCalificacion(calificacionClass);
			entity.setJornada(jornadaClass);
			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.save(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}
	
	public void saveCalific(Integer usuaidn_Usuario, Date califechad,
			Integer examidn, Integer cal_caliidn, Integer caliestadon)
			throws Exception {

		Calificacion entity = null;

		try {

			if (usuaidn_Usuario == null) {
				throw new ZMessManager().new EmptyFieldException(
						"usuaidn_Usuario");
			}
		
			IUsuarioLogic logicUsuario = new UsuarioLogic();
			Usuario usuarioClass = logicUsuario.getUsuario(usuaidn_Usuario);
			IExamenLogic logicExamen = new ExamenLogic();
			Examen examenClass = logicExamen.getExamen(examidn);
						ICalificacionLogic logicCalificacion = new CalificacionLogic();
			Calificacion calificacionClass = logicCalificacion
					.getCalificacion(cal_caliidn);
			
			
			entity = new Calificacion();
			entity.setUsuario(usuarioClass);
			entity.setCalifechad(califechad);
			entity.setExamen(examenClass);
			entity.setCalificacion(calificacionClass);
			entity.setCaliestadon(caliestadon);
			
			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.save(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}
	
	public void deleteCalificacion(Integer caliidn) throws Exception {

		Calificacion entity = null;

		if (caliidn == null) {
			throw new ZMessManager().new EmptyFieldException("caliidn");
		}

/*		List<Calificacion> calificacions = null;
		List<Calificacionxestudiante> calificacionxestudiantes = null;*/
		List<Premarcado> premarcados = null;
		entity = getCalificacion(caliidn);

		if (entity == null) {
			throw new ZMessManager().new EmptyFieldException("Calificacion");
		}

		try {
/*			calificacions = XMLHibernateDaoFactory.getInstance()
					.getCalificacionDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			if (Utilities.validationsList(calificacions) == true) {
				throw new ZMessManager().new DeletingException("calificacions");
			}

			calificacionxestudiantes = XMLHibernateDaoFactory.getInstance()
					.getCalificacionxestudianteDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			if (Utilities.validationsList(calificacionxestudiantes) == true) {
				throw new ZMessManager().new DeletingException(
						"calificacionxestudiantes");
			}*/

			premarcados = XMLHibernateDaoFactory.getInstance()
					.getPremarcadoDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			if (Utilities.validationsList(premarcados) == true) {
				throw new ZMessManager().new DeletingException("premarcados");
			}

			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.delete(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}

	public void deletePaquete(Integer caliidn) throws Exception {

		Calificacion entity = null;

		if (caliidn == null) {
			throw new ZMessManager().new EmptyFieldException("caliidn");
		}

	/*	List<Calificacion> calificacions = null;
		List<Calificacionxestudiante> calificacionxestudiantes = null;*/
		List<Premarcado> premarcados = null;
		entity = getCalificacion(caliidn);

		if (entity == null) {
			throw new ZMessManager().new EmptyFieldException("Calificacion");
		}

		try {
		/*	calificacions = XMLHibernateDaoFactory.getInstance()
					.getCalificacionDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			
			  if (Utilities.validationsList(calificacions) == true) { throw new
			  ZMessManager().new DeletingException("calificacions"); }

			calificacionxestudiantes = XMLHibernateDaoFactory.getInstance()
					.getCalificacionxestudianteDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			if (Utilities.validationsList(calificacionxestudiantes) == true) {
				throw new ZMessManager().new DeletingException(
						"calificacionxestudiantes");
			}
*/
			premarcados = XMLHibernateDaoFactory.getInstance()
					.getPremarcadoDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			if (Utilities.validationsList(premarcados) == true) {
				throw new ZMessManager().new DeletingException("premarcados");
			}

			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.delete(entity);

			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}
	
	
	public void deleteSalon(Integer caliidn) throws Exception {
		Calificacion entity = null;

		if (caliidn == null) {
			throw new ZMessManager().new EmptyFieldException("caliidn");
		}

		List<Calificacion> calificacions = null;
		List<Calificacionxestudiante> calificacionxestudiantes = null;
		List<Premarcado> premarcados = null;
		entity = getCalificacion(caliidn);

		if (entity == null) {
			throw new ZMessManager().new EmptyFieldException("Calificacion");
		}

		try {
			calificacions = XMLHibernateDaoFactory.getInstance()
					.getCalificacionDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			/*
			 * if (Utilities.validationsList(calificacions) == true) { throw new
			 * ZMessManager().new DeletingException("calificacions"); }
			 */

			calificacionxestudiantes = XMLHibernateDaoFactory.getInstance()
					.getCalificacionxestudianteDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			if (Utilities.validationsList(calificacionxestudiantes) == true) {
				throw new ZMessManager().new DeletingException(
						"calificacionxestudiantes");
			}

			premarcados = XMLHibernateDaoFactory.getInstance()
					.getPremarcadoDAO()
					.findByProperty("calificacion.caliidn", caliidn);

			if (Utilities.validationsList(premarcados) == true) {
				throw new ZMessManager().new DeletingException("premarcados");
			}

			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.delete(entity);

			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}

	public void updatePaquete(Integer caliidn, Integer cursidn_Curso,
			Integer distidn_Distribuidor) throws Exception {
		Calificacion entity = null;

		try {
			if (cursidn_Curso == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cursidn_Curso");
			}

			if (distidn_Distribuidor == null) {
				throw new ZMessManager().new EmptyFieldException(
						"distidn_Distribuidor");
			}

			ICursoLogic logicCurso3 = new CursoLogic();

			IDistribuidorLogic logicDistribuidor4 = new DistribuidorLogic();

			Curso cursoClass = logicCurso3.getCurso(cursidn_Curso);
			Distribuidor distribuidorClass = logicDistribuidor4
					.getDistribuidor(distidn_Distribuidor);

			if (cursoClass == null) {
				throw new ZMessManager().new ForeignException("curso");
			}

			if (distribuidorClass == null) {
				throw new ZMessManager().new ForeignException("distribuidor");
			}

			entity = getCalificacion(caliidn);

			if (entity == null) {
				throw new ZMessManager(ZMessManager.ENTITY_NOENTITYTOUPDATE);
			}

			entity.setCaliidn(caliidn);
			entity.setCurso(cursoClass);
			entity.setDistribuidor(distribuidorClass);
			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.update(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}
	
	
	public void updateSalon(Integer caliidn, Integer cursidn_Curso,
			Integer jornidn_Jornada) throws Exception {
		Calificacion entity = null;

		try {
			
			if (cursidn_Curso == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cursidn_Curso");
			}

			ICursoLogic logicCurso3 = new CursoLogic();
			Curso cursoClass = logicCurso3.getCurso(cursidn_Curso);
			
			IJornadaLogic logicJornada = new JornadaLogic();
			Jornada jornadaClass = logicJornada.getJornada(jornidn_Jornada);

			entity = getCalificacion(caliidn);

			if (entity == null) {
				throw new ZMessManager(ZMessManager.ENTITY_NOENTITYTOUPDATE);
			}
			
			
			entity.setCaliidn(caliidn);
			entity.setCurso(cursoClass);
			entity.setJornada(jornadaClass);
			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.update(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}
	

	public void updateCalificacion(Integer caliestadon, Date califechad,
			Integer caliidn, Integer calipremarcan,
			Integer caliidn_Calificacion, Integer coleidn_Colegio,
			Integer cursidn_Curso, Integer distidn_Distribuidor,
			Integer examidn_Examen, Integer jornidn_Jornada,
			Integer usuaidn_Usuario) throws Exception {
		Calificacion entity = null;

		try {
			if (caliidn == null) {
				throw new ZMessManager().new EmptyFieldException("caliidn");
			}

			if (caliidn_Calificacion == null) {
				throw new ZMessManager().new EmptyFieldException(
						"caliidn_Calificacion");
			}

			if (coleidn_Colegio == null) {
				throw new ZMessManager().new EmptyFieldException(
						"coleidn_Colegio");
			}

			if (cursidn_Curso == null) {
				throw new ZMessManager().new EmptyFieldException(
						"cursidn_Curso");
			}

			if (distidn_Distribuidor == null) {
				throw new ZMessManager().new EmptyFieldException(
						"distidn_Distribuidor");
			}

			if (examidn_Examen == null) {
				throw new ZMessManager().new EmptyFieldException(
						"examidn_Examen");
			}

			if (jornidn_Jornada == null) {
				throw new ZMessManager().new EmptyFieldException(
						"jornidn_Jornada");
			}

			if (usuaidn_Usuario == null) {
				throw new ZMessManager().new EmptyFieldException(
						"usuaidn_Usuario");
			}

			ICalificacionLogic logicCalificacion1 = new CalificacionLogic();

			IColegioLogic logicColegio2 = new ColegioLogic();

			ICursoLogic logicCurso3 = new CursoLogic();

			IDistribuidorLogic logicDistribuidor4 = new DistribuidorLogic();

			IExamenLogic logicExamen5 = new ExamenLogic();

			IJornadaLogic logicJornada6 = new JornadaLogic();

			IUsuarioLogic logicUsuario7 = new UsuarioLogic();
			Calificacion calificacionClass = logicCalificacion1
					.getCalificacion(caliidn_Calificacion);
			Colegio colegioClass = logicColegio2.getColegio(coleidn_Colegio);
			Curso cursoClass = logicCurso3.getCurso(cursidn_Curso);
			Distribuidor distribuidorClass = logicDistribuidor4
					.getDistribuidor(distidn_Distribuidor);
			Examen examenClass = logicExamen5.getExamen(examidn_Examen);
			Jornada jornadaClass = logicJornada6.getJornada(jornidn_Jornada);
			Usuario usuarioClass = logicUsuario7.getUsuario(usuaidn_Usuario);

			if (calificacionClass == null) {
				throw new ZMessManager().new ForeignException("calificacion");
			}

			if (colegioClass == null) {
				throw new ZMessManager().new ForeignException("colegio");
			}

			if (cursoClass == null) {
				throw new ZMessManager().new ForeignException("curso");
			}

			if (distribuidorClass == null) {
				throw new ZMessManager().new ForeignException("distribuidor");
			}

			if (examenClass == null) {
				throw new ZMessManager().new ForeignException("examen");
			}

			if (jornadaClass == null) {
				throw new ZMessManager().new ForeignException("jornada");
			}

			if (usuarioClass == null) {
				throw new ZMessManager().new ForeignException("usuario");
			}

			entity = getCalificacion(caliidn);

			if (entity == null) {
				throw new ZMessManager(ZMessManager.ENTITY_NOENTITYTOUPDATE);
			}

			entity.setCaliestadon(caliestadon);
			entity.setCalifechad(califechad);
			entity.setCaliidn(caliidn);
			entity.setCalipremarcan(calipremarcan);
			entity.setCalificacion(calificacionClass);
			entity.setColegio(colegioClass);
			entity.setCurso(cursoClass);
			entity.setDistribuidor(distribuidorClass);
			entity.setExamen(examenClass);
			entity.setJornada(jornadaClass);
			entity.setUsuario(usuarioClass);
			HibernateSessionFactory.beginTransaction();
			XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.update(entity);
			HibernateSessionFactory.commit();
		} catch (Exception e) {
			HibernateSessionFactory.rollback();
			throw e;
		} finally {
			HibernateSessionFactory.closeSession();
		}
	}

	public Calificacion getCalificacion(Integer caliidn) throws Exception {
		Calificacion entity = null;

		try {
			entity = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findById(caliidn);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return entity;
	}

	public List<Calificacion> findGruposColegios(Long coleidn) throws Exception {

		List<Calificacion> list = new ArrayList<Calificacion>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findGruposColegios(coleidn);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return list;
	}

	public List<Calificacion> findSalonesGrupo(Integer cal_caliidn)
			throws Exception {

		List<Calificacion> list = new ArrayList<Calificacion>();
		
		
		SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
		
		List<String> fechasTab= new ArrayList<String>();
		
		for (int i = 0; i < list.size(); i++) {
			System.out.println();
			String fechaTab = (df.format(list.get(i).getCalifechad())); 
			fechasTab.add(fechaTab);
			System.out.println("FECHAS"+fechasTab.get(i).toString());
		}
		

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findSalonesGrupo(cal_caliidn);
			
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return list;
	}
	
	
	public List<Calificacion> findCalificaciones(Integer cal_caliidn)
			throws Exception {

		List<Calificacion> list = new ArrayList<Calificacion>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findCalificaciones(cal_caliidn);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return list;
	}

	public List<Curso> getGrupo() throws Exception {
		List<Curso> list = new ArrayList<Curso>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getCursoDAO()
					.findAllGrupo();
		} catch (Exception e) {
			throw new ZMessManager().new GettingException(ZMessManager.ALL
					+ "Lugar");
		} finally {
		}

		return list;
	}

	public List<CalificacionDTO> getDataCalificacion() throws Exception {
		try {
			List<Calificacion> calificacion = XMLHibernateDaoFactory
					.getInstance().getCalificacionDAO().findAll();

			List<CalificacionDTO> calificacionDTO = new ArrayList<CalificacionDTO>();

			for (Calificacion calificacionTmp : calificacion) {
				CalificacionDTO calificacionDTO2 = new CalificacionDTO();

				calificacionDTO2.setCaliidn(calificacionTmp.getCaliidn());
				calificacionDTO2.setCaliestadon((calificacionTmp
						.getCaliestadon() != null) ? calificacionTmp
						.getCaliestadon() : null);
				calificacionDTO2.setCalifechad(calificacionTmp.getCalifechad());
				calificacionDTO2.setCalipremarcan((calificacionTmp
						.getCalipremarcan() != null) ? calificacionTmp
						.getCalipremarcan() : null);

				if (calificacionTmp.getCalificacion() != null) {
					calificacionDTO2.setCaliidn_Calificacion(calificacionTmp
							.getCalificacion().getCaliidn());
				} else {
					calificacionDTO2.setCaliidn_Calificacion(null);
				}

				if (calificacionTmp.getColegio() != null) {
					calificacionDTO2.setColeidn_Colegio(calificacionTmp
							.getColegio().getColeidn());
				} else {
					calificacionDTO2.setColeidn_Colegio(null);
				}

				if (calificacionTmp.getCurso() != null) {
					calificacionDTO2.setCursidn_Curso(calificacionTmp
							.getCurso().getCursidn());
				} else {
					calificacionDTO2.setCursidn_Curso(null);
				}

				if (calificacionTmp.getDistribuidor() != null) {
					calificacionDTO2.setDistidn_Distribuidor(calificacionTmp
							.getDistribuidor().getDistidn());
				} else {
					calificacionDTO2.setDistidn_Distribuidor(null);
				}

				if (calificacionTmp.getExamen() != null) {
					calificacionDTO2.setExamidn_Examen(calificacionTmp
							.getExamen().getExamidn());
				} else {
					calificacionDTO2.setExamidn_Examen(null);
				}

				if (calificacionTmp.getJornada() != null) {
					calificacionDTO2.setJornidn_Jornada(calificacionTmp
							.getJornada().getJornidn());
				} else {
					calificacionDTO2.setJornidn_Jornada(null);
				}

				if (calificacionTmp.getUsuario() != null) {
					calificacionDTO2.setUsuaidn_Usuario(calificacionTmp
							.getUsuario().getUsuaidn());
				} else {
					calificacionDTO2.setUsuaidn_Usuario(null);
				}

				calificacionDTO.add(calificacionDTO2);
			}

			return calificacionDTO;
		} catch (Exception e) {
			throw e;
		}
	}

	public List<Calificacion> findPageCalificacion(String sortColumnName,
			boolean sortAscending, int startRow, int maxResults)
			throws Exception {
		List<Calificacion> entity = null;

		try {
			entity = XMLHibernateDaoFactory
					.getInstance()
					.getCalificacionDAO()
					.findPageCalificacion(sortColumnName, sortAscending,
							startRow, maxResults);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return entity;
	}

	public Long findTotalNumberCalificacion() throws Exception {
		Long entity = null;

		try {
			entity = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findTotalNumberCalificacion();
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion Count");
		} finally {
		}

		return entity;
	}

	/**
	 * 
	 * @param varibles
	 *            este arreglo debera tener:
	 * 
	 *            [0] = String variable = (String) varibles[i]; representa como
	 *            se llama la variable en el pojo
	 * 
	 *            [1] = Boolean booVariable = (Boolean) varibles[i + 1];
	 *            representa si el valor necesita o no ''(comillas simples)usado
	 *            para campos de tipo string
	 * 
	 *            [2] = Object value = varibles[i + 2]; representa el valor que
	 *            se va a buscar en la BD
	 * 
	 *            [3] = String comparator = (String) varibles[i + 3]; representa
	 *            que tipo de busqueda voy a hacer.., ejemplo: where
	 *            nombre=william o where nombre<>william, en este campo iria el
	 *            tipo de comparador que quiero si es = o <>
	 * 
	 *            Se itera de 4 en 4..., entonces 4 registros del arreglo
	 *            representan 1 busqueda en un campo, si se ponen mas pues el
	 *            continuara buscando en lo que se le ingresen en los otros 4
	 * 
	 * 
	 * @param variablesBetween
	 * 
	 *            la diferencia son estas dos posiciones
	 * 
	 *            [0] = String variable = (String) varibles[j]; la variable ne
	 *            la BD que va a ser buscada en un rango
	 * 
	 *            [1] = Object value = varibles[j + 1]; valor 1 para buscar en
	 *            un rango
	 * 
	 *            [2] = Object value2 = varibles[j + 2]; valor 2 para buscar en
	 *            un rango ejempolo: a > 1 and a < 5 --> 1 seria value y 5 seria
	 *            value2
	 * 
	 *            [3] = String comparator1 = (String) varibles[j + 3];
	 *            comparador 1 ejemplo: a comparator1 1 and a < 5
	 * 
	 *            [4] = String comparator2 = (String) varibles[j + 4];
	 *            comparador 2 ejemplo: a comparador1>1 and a comparador2<5 (el
	 *            original: a > 1 and a < 5) *
	 * @param variablesBetweenDates
	 *            (en este caso solo para mysql) [0] = String variable =
	 *            (String) varibles[k]; el nombre de la variable que hace
	 *            referencia a una fecha
	 * 
	 *            [1] = Object object1 = varibles[k + 2]; fecha 1 a
	 *            comparar(deben ser dates)
	 * 
	 *            [2] = Object object2 = varibles[k + 3]; fecha 2 a
	 *            comparar(deben ser dates)
	 * 
	 *            esto hace un between entre las dos fechas.
	 * 
	 * @return lista con los objetos que se necesiten
	 * @throws Exception
	 */
	public List<Calificacion> findByCriteria(Object[] variables,
			Object[] variablesBetween, Object[] variablesBetweenDates)
			throws Exception {
		List<Calificacion> list = new ArrayList<Calificacion>();
		String where = new String();
		String tempWhere = new String();

		if (variables != null) {
			for (int i = 0; i < variables.length; i++) {
				if ((variables[i] != null) && (variables[i + 1] != null)
						&& (variables[i + 2] != null)
						&& (variables[i + 3] != null)) {
					String variable = (String) variables[i];
					Boolean booVariable = (Boolean) variables[i + 1];
					Object value = variables[i + 2];
					String comparator = (String) variables[i + 3];

					if (booVariable.booleanValue()) {
						tempWhere = (tempWhere.length() == 0) ? ("(model."
								+ variable + " " + comparator + " \'" + value + "\' )")
								: (tempWhere + " AND (model." + variable + " "
										+ comparator + " \'" + value + "\' )");
					} else {
						tempWhere = (tempWhere.length() == 0) ? ("(model."
								+ variable + " " + comparator + " " + value + " )")
								: (tempWhere + " AND (model." + variable + " "
										+ comparator + " " + value + " )");
					}
				}

				i = i + 3;
			}
		}

		if (variablesBetween != null) {
			for (int j = 0; j < variablesBetween.length; j++) {
				if ((variablesBetween[j] != null)
						&& (variablesBetween[j + 1] != null)
						&& (variablesBetween[j + 2] != null)
						&& (variablesBetween[j + 3] != null)
						&& (variablesBetween[j + 4] != null)) {
					String variable = (String) variablesBetween[j];
					Object value = variablesBetween[j + 1];
					Object value2 = variablesBetween[j + 2];
					String comparator1 = (String) variablesBetween[j + 3];
					String comparator2 = (String) variablesBetween[j + 4];
					tempWhere = (tempWhere.length() == 0) ? ("(" + value + " "
							+ comparator1 + " " + variable + " and " + variable
							+ " " + comparator2 + " " + value2 + " )")
							: (tempWhere + " AND (" + value + " " + comparator1
									+ " " + variable + " and " + variable + " "
									+ comparator2 + " " + value2 + " )");
				}

				j = j + 4;
			}
		}

		if (variablesBetweenDates != null) {
			for (int k = 0; k < variablesBetweenDates.length; k++) {
				if ((variablesBetweenDates[k] != null)
						&& (variablesBetweenDates[k + 1] != null)
						&& (variablesBetweenDates[k + 2] != null)) {
					String variable = (String) variablesBetweenDates[k];
					Object object1 = variablesBetweenDates[k + 1];
					Object object2 = variablesBetweenDates[k + 2];
					String value = null;
					String value2 = null;

					try {
						Date date1 = (Date) object1;
						Date date2 = (Date) object2;
						value = Utilities
								.formatDateWithoutTimeInAStringForBetweenWhere(date1);
						value2 = Utilities
								.formatDateWithoutTimeInAStringForBetweenWhere(date2);
					} catch (Exception e) {
						list = null;
						throw e;
					}

					tempWhere = (tempWhere.length() == 0) ? ("(model."
							+ variable + " between \'" + value + "\' and \'"
							+ value2 + "\')") : (tempWhere + " AND (model."
							+ variable + " between \'" + value + "\' and \'"
							+ value2 + "\')");
				}

				k = k + 2;
			}
		}

		if (tempWhere.length() == 0) {
			where = null;
		} else {
			where = "(" + tempWhere + ")";
		}

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findByCriteria(where);
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} finally {
		}

		return list;
	}

	public List<Calificacion> findFechaGruposColegio(Long coleidn)
			throws Exception {
		List<Calificacion> list = new ArrayList<Calificacion>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findFechaGruposColegio(coleidn);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return list;
	}

	public List<VSalones> findNumAlumnSalon(Integer caliidn) throws Exception {
		List<VSalones> num = null;

		try {
			num = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findNumAlumnSalon(caliidn);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}
		return num;
	}

	public List<Tipoexamen> getTipoExamen() throws Exception {
		List<Tipoexamen> list = new ArrayList<Tipoexamen>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getTipoexamenDAO()
					.findAll();
		} catch (Exception e) {
			throw new ZMessManager().new GettingException(ZMessManager.ALL
					+ "Lugar");
		} finally {
		}

		return list;
	}

	public List findEstudiantesxCalificacion(Integer caliidn) throws Exception {
		List<Calificacion> list = new ArrayList<Calificacion>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findEstudiantesxCalificacion(caliidn);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return list;
	}

	public List findNotasxEstudiante(Integer caliidn, Integer estuidn)
			throws Exception {
		List<Calificacion> list = new ArrayList<Calificacion>();

		try {
			list = XMLHibernateDaoFactory.getInstance().getCalificacionDAO()
					.findNotasxEstudiante(caliidn, estuidn);
		} catch (Exception e) {
			throw new ZMessManager().new FindingException("Calificacion");
		} finally {
		}

		return list;
	}
}
